#pragma once
#ifndef LayoutFactory_H 
#define LayoutFactory_H

#include "FakeNode.h"
#include "ClientParams.h"
#include "IntrusivePointer.h"
#include "LayoutNode.h"
#include "LayoutGroup.h"

namespace fusion
{
	namespace mode10
	{
		class LayoutFactory
		{
		public:
			enum LayoutType
			{
				Relative_Layout,
			};
			static bool AddLayoutEffect(const Ref<Node>& currentNode, const Ref<ClientParamsAdapter>& params);
			static bool RemoveLayoutEffect(Ref<Node>& node);
		private:
			static LayoutType GetLayoutType(fusion::Ref<ClientParamsAdapter> params)
			{
				return Relative_Layout;
			}
			static LayoutType GetLayoutType(fusion::Ref<LayoutNode> layout)
			{
				return Relative_Layout;
			}
			static fusion::Ref<LayoutGroup> CreateLayout (LayoutType type, const Ref<Node> currentNode);
			static bool GenerateLayoutParams(const Ref<LayoutGroup>& layout, Ref<Node> currentNode, const Ref<ClientParamsAdapter>& params);
		};
	}
}

#endif
